package com.pattern.factory.method;

/**
 * 工厂方法模式
 * @author LYao15
 */
/**
 * 1、创建抽象产品类、或者接口
 */
abstract class Computer {
    /**
     * 产品的抽象方法，由具体的产品类去实现
     */
    public abstract void start();
}

/**
 * 2、创建具体产品类
 */
//戴尔电脑
class DellComputer extends Computer {
    @Override
    public void start() {
        System.out.println("联想电脑启动");
    }
}
//惠普电脑
class HpComputer extends Computer {
    @Override
    public void start() {
        System.out.println("惠普电脑启动");
    }
}

/**
 * 3、定义抽象工厂、或者接口
 */
abstract class ComputerFactory{
    public abstract Computer newProduct();
}

/**
 * 4、具体工厂
 */
class HpFactorys extends ComputerFactory{

    @Override
    public Computer newProduct() {
        return new HpComputer();
    }
}

class DellFactorys extends ComputerFactory{

    @Override
    public Computer newProduct() {
        return new DellComputer();
    }
}
public class FactoryMethodTest {
    public static void main(String[] args) {
        Computer computer = null;
        ComputerFactory factory = null;

        //搞一个惠普的工厂，并造一台电脑
        factory = new HpFactorys();
        computer = factory.newProduct();
        computer.start();
    }

}
